<?php
namespace Ucmaim\Controller\Home;

class PayController extends CommonController{
    // 支付回调（异步处理）
    public function Pay_Notify(){
        $post = I('post.');
        if( $post['trade_status'] !== 'TRADE_SUCCESS' ) echo 'fail';
        echo $this->_PaySuccess($post['out_trade_no'], $post['trade_no']) === true ? 'success' : 'fail';
    }

    // 支付返回结果
    public function Pay_Return(){
        $get = I('get.');
        if($get['trade_status'] !== 'TRADE_SUCCESS') $this->error('支付失败', U('Home/Index'));
        $this->_PaySuccess($get['out_trade_no'], $get['trade_no']) === true ? $this->display('Home/Buy/PaySuccess') : $this->error('支付失败', U('Home/Index'));
    }

    //支付成功处理
    private function _PaySuccess($order_sn, $pay_sn){
        $Order = D('Order');
        $Log   = D('MoneyLog');
        $order_info = $Order->getOrderInfo($order_sn);
        // 订单不存在
        if( empty($order_info) ) return false;
        // 检测订单状态已被处理
        if($order_info['order_status'] != 2){
            // 设置订单状态为：2买家已付款，等待发货 , 增加买家和卖家的资金流水记录
            $Order->startTrans();
            // 更新订单状态
            $r1 = $Order->updateOrderStatus($order_sn, 2);
            // 买家流水记录
            $remark = '支付成功';
            $r2 = $Log->makeLog($order_info['buyer_id'], $order_info['seller_id'], -order_amount($order_info['order_number'], $order_info['order_price']), $order_sn, $pay_sn, $remark);
            if( $r1 & $r2 ){
                $Order->commit();
                return true;
            }else{
                $Order->rollback();
                return false;
            }
        }elseif( $order_info['order_status'] == 2 ){
            return true;
        }else{
            return false;
        }
    }

}